package com.smart.community.user.controller;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.smart.community.commons.result.PageResult;
import com.smart.community.commons.result.Result;
import com.smart.community.commons.utils.SecurityUtils;
import com.smart.community.user.dto.LoginLogQueryDTO;
import com.smart.community.user.entity.LoginLog;
import com.smart.community.user.service.LoginLogService;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;

/**
 * 登录日志管理控制器
 * 
 * @author Wu.Liang
 * @since 2025-01-30
 */
@Slf4j
@RestController
@RequestMapping("/user/login-logs")
@Validated
@Tag(name = "登录日志管理", description = "登录日志相关接口")
public class LoginLogController {
    
    @Autowired
    private LoginLogService loginLogService;
    
    /**
     * 分页查询登录日志
     * 
     * @param queryDTO 查询条件
     * @return 分页结果
     * @throws Exception 统一异常
     */
    @GetMapping
    @Operation(summary = "分页查询登录日志", description = "根据条件分页查询登录日志")
    public Result<PageResult<LoginLog>> getLoginLogPage(@Valid @ModelAttribute LoginLogQueryDTO queryDTO) throws Exception {
        
        // 获取当前用户ID
        Long currentUserId = SecurityUtils.getCurrentUserId();
        
        log.info("查询登录日志，当前用户ID：{}", currentUserId);
        
        // 使用标准权限验证流程
        PageResult<LoginLog> result = loginLogService.getLoginLogPageWithPermission(queryDTO);
        
        return Result.success(result);
    }
    
    /**
     * 导出登录日志
     *
     * @param queryDTO 查询条件
     * @return 导出结果
     * @throws Exception 统一异常
     */
    @PostMapping("/export")
    @Operation(summary = "导出登录日志", description = "根据查询条件导出登录日志")
    public Result<String> exportLoginLogs(@RequestBody LoginLogQueryDTO queryDTO) throws Exception {
        log.info("导出登录日志，查询条件：{}", queryDTO);
        
        // 生成导出文件名
        String fileName = "login_logs_" + System.currentTimeMillis() + ".xlsx";
        
        // 这里可以使用EasyExcel或POI来生成Excel文件
        // 实际实现时需要添加具体的Excel导出逻辑
        // 建议使用登录日志权限服务获取有权限的数据再导出
        
        return Result.success("导出功能开发中，文件名：" + fileName);
    }

    /**
     * 清空登录日志
     *
     * @return 操作结果
     * @throws Exception 统一异常
     */
    @DeleteMapping("/clear")
    @Operation(summary = "清空登录日志", description = "清空所有登录日志记录")
    public Result<String> clearLoginLogs() throws Exception {
        log.info("清空登录日志");
        
        // 验证是否有清空权限
        Long currentUserId = SecurityUtils.getCurrentUserId();
        if (currentUserId == null) {
            return Result.fail("用户未登录");
        }
        
        // 执行清空操作（可以考虑软删除或者备份后删除）
        // 实际实现时建议添加确认机制和备份功能
        // 建议只有超级管理员才能执行清空操作
        
        return Result.success("登录日志清空功能暂未开放，请联系系统管理员");
    }
}
